/*----------------------------------------------------------------------------
Owner(s): Shane Whitfield
$Copyright: $
$Id: 

Purpose  : 
----------------------------------------------------------------------------*/

#pragma once

#include "singleton.h"
#include <vector>
#include "subsystem.h"

/*--------------------------------------------------------------------------*/
// Class CNNCommand declaration.
class CCommandTaker;
#if DEBUG
class CNNCommand : public TSingleton<CNNCommand>, public CSubsystem
{
	typedef CSubsystem super;

public:
			CNNCommand();
			
	void	RegisterCommandTaker(CCommandTaker* i_commandTaker);
	void	HandleCommand(const char* i_commandTakerName, const char* i_commandFunction, const char* i_parameters);

private:

	std::vector<CCommandTaker*>	m_commandTakers;
	
};
inline CNNCommand& CNNCommand_GetSingleton() { return CNNCommand::GetSingleton(); }
#define g_nncommand (CNNCommand_GetSingleton())
#endif

class CCommandTaker
{
public:

						CCommandTaker();
			
#if DEBUG
	virtual const char*	GetName() const = 0;
	virtual void		On_Command(const char* i_command, const char* i_parameters) = 0;
#endif

};

/*-----------------------------------EOF!-----------------------------------*/